﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DataAccess;
using System.Linq.Expressions;
using QuanLyKhachSan.Validation;
using QuanLyKhachSan;
using System.Data.Entity;

namespace BLL
{
    public class PhongManager : IValidator<Phong>, ILenhThucThi<Phong>
    {
        public ValidateResult Validate(Phong obj)
        {
            var vResult = new ValidateResult();
            if (obj.SoPhong.Trim() == "")
            {
                vResult.Message.Add("Chưa nhập số phòng!");
            }
            if (obj.MaLoaiPhong.Trim() == "")
            {
                vResult.Message.Add("Chưa chọn mã loại phòng!");
            }
            if (obj.TrangThaiPhong.Trim() == "")
            {
                vResult.Message.Add("Chưa nhập trạng thái phòng!");
            }
            if (obj.SucChua <= 0)
            {
                vResult.Message.Add("Sức chứa phải là số nguyên lớn hơn 0!");
            }
            return vResult;
        }

        public ActionResult Them(Phong obj)
        {
            ActionResult aResult = new ActionResult();
            using (QLKhachSanContext context = new QLKhachSanContext())
            {
                var query = from p in context.Phongs
                            where p.SoPhong == obj.SoPhong
                            select p;
                try
                {
                    if (query.Any())
                    {
                        aResult.Exceptions.Add(new Exception("Đã tồn tại phòng có số phòng là: "+obj.SoPhong));
                    }
                    else
                    {
                        context.Phongs.Add(obj);
                        context.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    aResult.Exceptions.Add(ex);
                }
                return aResult;
            }
        }

        public ActionResult CapNhat(Phong obj)
        {
            var actionResult = new ActionResult();
            using (var context = new QLKhachSanContext())
            {
                var pUpdate = context.Phongs.FirstOrDefault(p => p.SoPhong.Equals(obj.SoPhong));
                try
                {
                    pUpdate.SoPhong = obj.SoPhong;
                    pUpdate.MaLoaiPhong = obj.MaLoaiPhong;
                    pUpdate.TrangThaiPhong = obj.TrangThaiPhong;
                    pUpdate.SucChua = obj.SucChua;

                    context.Entry(pUpdate).State = EntityState.Modified;
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    actionResult.Exceptions.Add(ex);
                }
            }
            return actionResult;
        }

        public ActionResultAsList<Phong> LayDanhSach()
        {
            var actionResult = new ActionResultAsList<Phong>();
            var context = new QLKhachSanContext();
            actionResult.Result = context.Phongs.Where(p => p.TrangThaiPhong != null && System.String.Compare(p.TrangThaiPhong, "Da xoa", System.StringComparison.InvariantCultureIgnoreCase) != 0 && System.String.Compare(p.TrangThaiPhong, "Đã xóa", System.StringComparison.InvariantCultureIgnoreCase) != 0).ToList();
            return actionResult;
        }

        public ActionResult Xoa(Phong ma)
        {
            throw new NotImplementedException();
        }

        public ActionResult Xoa(string ma)
        {
            throw new NotImplementedException();
        }
    }
}
